/**
 * 
 */
package it.polimi.politics.ejb.managers;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import it.polimi.politics.dto.PartitoDTO;
import it.polimi.politics.dto.UtentiDTO;
import it.polimi.politics.ejb.entities.Partito;
import it.polimi.politics.ejb.entities.Utenti;
import it.polimi.politics.managers.PartitoManager;

@Stateless
public class PartitoMgrBean implements PartitoManager {

	/* (non-Javadoc)
	 * @see it.polimi.politics.managers.PartitoManager#getAllPartito()
	 */
	@PersistenceContext
	private EntityManager em;

	
	
	@Override
	public List<String> getAllNomePartito(){
		List<String> partitiNames = new ArrayList<String>();
		
		List<Partito> partitiList = new ArrayList<Partito>();
		
		partitiList = em.createNamedQuery(Partito.FIND_ALL, Partito.class).getResultList();
		
		for(int i = 0; i < partitiList.size(); i++)
			
			partitiNames.add(partitiList.get(i).getNome());
		
		return partitiNames;
		
	}
	
	@Override
	public PartitoDTO getPartitoDTO(String id){
		
		int idPartito = Integer.parseInt(id);
		Partito partito=em.find(Partito.class, idPartito);
		
		return convertToDTO(partito);
		
	}
	
	@Override
	public PartitoDTO getPartitoDTO(int idPartito){
		
		Partito partito=em.find(Partito.class, idPartito);
		return convertToDTO(partito);
		
	}
	
	@Override
	public List<PartitoDTO> getAllPartiti(){
		
		List<Partito> partitiList = new ArrayList<Partito>();
		List<PartitoDTO> partitiDTOList = new ArrayList<PartitoDTO>();
		
		partitiList = em.createNamedQuery(Partito.FIND_ALL, Partito.class).getResultList();
		
		for(int i = 0; i < partitiList.size(); i++){
			partitiDTOList.add(convertToDTO(partitiList.get(i)));
			
		}
		
		return partitiDTOList;
	}


	   public UtentiDTO convertToDTO(Utenti utente) {
			
			UtentiDTO utenteDTO = new UtentiDTO();
			utenteDTO.setCitta(utente.getCitta());
			utenteDTO.setCodiceFiscale(utente.getCodicefiscale());
			utenteDTO.setCognome(utente.getCognome());
			utenteDTO.setDataDiNascita(utente.getDatadinascita());
			utenteDTO.setEMail(utente.getEmail());
			utenteDTO.setIDUtente(utente.getIDUtente());
			utenteDTO.setNome(utente.getNome());
			utenteDTO.setPassword(utente.getPassword());
			utenteDTO.setTipoUtente(utente.getTipoutente());
			utenteDTO.setUsername(utente.getUsername());
			return utenteDTO;
		}
	   
	 

	   
	public List<UtentiDTO> getUtentiPartito(int idPartito){
		
		List<UtentiDTO> utentiListDto = new ArrayList<UtentiDTO>();
		List<Utenti> utentiList = new ArrayList<Utenti>();
		
		
		//utentiList = em.createQuery("SELECT p FROM Partiti p WHERE p.partitoid = :partitoid").setParameter("partitoid", idPartito).getResultList();
		  utentiList = em.createNamedQuery(Utenti.FINDBYPARTITO, Utenti.class).setParameter("idpartito", idPartito).getResultList();
		
		for(int i = 0; i < utentiList.size(); i++){
			utentiListDto.add(convertToDTO(utentiList.get(i)));
		}
		
		return utentiListDto;
	}

	public PartitoDTO convertToDTO(Partito partito) {

		PartitoDTO partitoDTO = new PartitoDTO();

		partitoDTO.setIDPartito(partito.getIdpartito());
		partitoDTO.setLogo(partito.getLogo());
		partitoDTO.setNome(partito.getNome());
		partitoDTO.setProgramma(partito.getProgramma());
		
		return partitoDTO;
	}
	
 

	
/*	@Override
	public List<PartitoDTO> getAllPartito() {
		return convertoToListDTO(em.createNamedQuery(Partito.FIND_ALL,
				Partito.class).getResultList());

	}


	private List<PartitoDTO> convertoToListDTO(List<Partito> partiti) {
		
		List<PartitoDTO> productDTOs = new ArrayList<PartitoDTO>();

		for (int i = 0; i < partiti.size(); i++) {
			productDTOs.add(convertToDTO(partiti.get(i)));
		}

		return productDTOs;
	}


	private PartitoDTO convertToDTO(Partito partito) {
		
		PartitoDTO partitoDTO = new PartitoDTO();

			partitoDTO.setIDPartito(partito.getIdpartito());
			partitoDTO.setLogo(partito.getLogo());
			partitoDTO.setNome(partito.getNome());
			partitoDTO.setProgramma(partito.getProgramma());

			return partitoDTO;
	}


	@Override
	public void creaCandidatura(CandidaturaDTO candidatura) {
		
		em.persist(new Candidatura(candidatura));
		em.flush();
	}
	
	
	
*/
			
			
}
